import appPermission from '@/utils/appPermisssion'
import scanResult from './scanResult'
import { Callback } from 'uni-ajax'
// 数据存储本地
export const setStorage = (key: string, value: any) => {
  uni.setStorageSync(key, JSON.stringify(value))
}
// 获取本地数据
export const getStorage = (key: string) => {
  const data = encodeURIComponent(uni.getStorageSync(key))
  return data ? JSON.parse(decodeURIComponent(data)) : null
}

/**
 * 判断数据类型
 * @param val 需要校验的数据
 * @param type 类型 Array | Object | String | Number | Null | Undefined | Function | Boolean
 * @returns Boolean
 */
export function isTypeof<T>(val: T, type: string) {
  return Object.prototype.toString.call(val).endsWith(`${type}]`)
}

/**
 * 扫码
 */
export function handleScan(type: string, callback?: Callback) {
  // 判断相机权限
  appPermission('CAMERA')?.then(res => {
    if (res) {
      uni.scanCode({
        scanType: ['barCode', 'qrCode'],
        success: function(res) {
          // 不符合要求的扫码结果
          if (!['EAN_13', 'QR_CODE', 'CODE_128', 'UPC_E'].includes(res.scanType)) {
            uni.showToast({
              title: '请扫描二维码/条形码',
              icon: 'none',
              duration: 1000
            })
          } else {
            // 根据扫码结果格式判断展示方式
            scanResult(res.result, type, (val) => {
              callback && callback(val)
            })
          }
        }
      })
    }
  })
}

/**
 * 轻提示方法
 *@param title //提示的内容
 *@param icon //图标样式
 *@param duration //提示的延迟时间，单位毫秒
 */
export function uniShowToast(title: string, icon?: 'none' | 'success' | 'loading' | 'error' | undefined, duration?: number) {
  uni.showToast({
    title,
    icon: icon || 'none',
    duration: duration || 1000
  })
}
/**
 * @param val //需要处理的日期
 */
export function iosDate(val: string) {
  return val.replace(/-/g, '/')
}
